package com.service;

import com.qqcommon.Message;
import com.qqcommon.MessageType;
import com.qqcommon.User;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;

/**
 * 该类用来完成客户登录验证和用户注册等功能
 */
public class UserClientService {
    private User user=new User();//因为我们在其他地方需要用到其属性,所以把他作为属性
    private Socket socket;//因为Socket在其他地方也会经常使用,所以也将其作为属性

    /**onlineFriendList()
     * 向服务端请求在线用户列表
     */
    public void onlineFriendList(){
        //创建一个Message对象,类型为"4"
        Message message=new Message();
        message.setMesType(MessageType.MESSAGE_GET_ONLINE_FRIEND);
        message.setSender(user.getId());

        //获取用户socket 关联的ObjectOutputStream对象输出流 发送消息
        //->先获取socket:先得到该用户与服务端保持通信的线程,再从线程中获取socket
        try {
            ObjectOutputStream oos = new ObjectOutputStream(ManageClientConnectServerThread.getClientConnectServerThread(user.getId()).getSocket().getOutputStream());
            oos.writeObject(message);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**logout()
     * 用户退出登录,同时给服务端发送消息
     */
    public void logout(){
        Message message=new Message();
        message.setMesType(MessageType.MESSAGE_CLIENT_EXIT);
        message.setSender(user.getId());
        try {
            ObjectOutputStream oos = new ObjectOutputStream(ManageClientConnectServerThread.getClientConnectServerThread(user.getId()).getSocket().getOutputStream());
            oos.writeObject(message);

            //退出
            System.out.println(user.getId()+"退出登录");
            System.exit(0);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public boolean checkUser(String id,String password){
        boolean b=false;
        //1.创建User对象
        user.setId(id);
        user.setPassword(password);
        //2.连接服务端,发送user对象
        try {
            socket=new Socket(InetAddress.getByName("127.0.0.1"),9999);
            //(1)得到ObjectOutputStream对象
            ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
            //发送User对象
            oos.writeObject(user);

            //(2)得到ObiectInputStream对象
            ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
            //获取服务端发送来的Message对象
            Message message=(Message) ois.readObject();

            //登录判断
            if(message.getMesType().equals(MessageType.MESSAGE_LOGIN_SUCCEED)){
                //登录成功
                //创建一个和服务器端保持通信的线程
                ClientConnectServerThread clientConnectServerThread = new ClientConnectServerThread(socket);
                clientConnectServerThread.start();//启动客户端线程
                ManageClientConnectServerThread.addClientConnectServerThread(id,clientConnectServerThread);//将线程添加到集合中
                b=true;
            }
            else{
                //登录失败
                //不能和服务器端保持通信的线程,关闭socket
                socket.close();
            }

        } catch (IOException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        return b;
    }

}
